package com.hyw.encryption.provider;

import org.springframework.lang.Nullable;

/**
 * 定义一个解密用的ISP,方便后续用于扩展
 * 
 * @author Hongyu
 */
public interface IDecryptionProvider {
  /**
   * @param key
   *          作为一个附加字段, 有可能 业务上需要根据不同的key使用不同的加密密钥.
   *          <p>
   *          以RSA为例,假设系统有十个用户, 每个用户在系统上都有不同的私钥和公钥. 则系统在加密给到客户端, 需要根据不同的用户信息体找出不同的公钥,进行加密.
   *          <p>
   *          没有这种特殊业务场景的话,则可以默认为null
   * @param content
   *          为需要加密的原始内容
   * @return
   */
  public byte[] decryptByKey(@Nullable String key, byte[] content);

  /**
   * 需要返回该ISP所支持和处理的算法类型,如果存在这类的算法解密需要,则会激活 {@link #decryptByKey(String, byte[])}方法,否则 , 自动过滤
   * <li>RSA
   * <li>AES
   * 
   * @return
   */
  public String getAlgorithm();
}
